python 命名空间与作用域

局部变量和全局变量,命名空间的理解

局部变量和全局变量

  • 局部变量是函数内部的占位符,与全局变量可能重名但不同
  • 函数运算结束后,局部变量被释放
  • 使用 global 关键字在函数内部声明并使用全局变量
  • 局部变量为组合数据类型且未创建,等同于全局变量,可读可写
  • 局部变量为基本数据类型且未创建,可读不可写

命名空间的理解

命名空间是从名字到对象的一种映射

作用域:全局变量名在模块命名空间,局部变量名在函数命名空间,属性和方法在类命名空间。名字全称:命名空间.变量名/函数名

命名空间底层由一个dict实现,变量名是key,变量引用的对象是value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
count = 0  # 定义全局变量


def getCount(a): # 定义第一层函数命名空间
count = 0 # 局部变量
if a != '':
def doCounting(): # 定义第二次函数命名空间
nonlocal count # 声明变量不在当前命名空间,在上层命名空间,但不是全局
count += 1

doCounting()
return count


print(getCount('2'), count)
print(getCount('1'), count)
print(getCount(''), count)

'''
1 0
1 0
0 0
'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
count = 0  # 定义全局变量


def getCount(a): # 定义第一层函数命名空间
count = 0 # 局部变量
if a != '':
def doCounting(): # 定义第二次函数命名空间
global count # 声明变量是全局变量
count += 1

doCounting()
return count


print(getCount('2'), count)
print(getCount('1'), count)
print(getCount(''), count)

'''
0 1
0 2
0 2
'''